Nexus Test (ZX Spectrum 128K)
-----------------------------

A Sinclair ZX Spectrum Game based on the test in the film Blade Runner.

**Android detection** interrogation game: pick probe topics on a grid, read the subject’s scenario and reply,
watch Voight-style gauges, then call **HUMAN** or **ANDROID**.
One hundred subjects, limited lives, scoring by speed (fewer questions = more points), high score table with initials.

Homage tone (e.g. *Blade Runner*); not affiliated with any rights holders.


How to play

1. Title — Full-screen bitmap title; Arkos Tracker 3 music on the AY. Subtitle and PRESS ANY KEY.
   After a timeout, the high score attract screen appears; any key starts a new game
   (score resets; high score table stays in RAM until you use a fresh snapshot or clear memory).
2. Level intro — Subject number and name; key skips the short delay.
3. Interrogation — Move on the QAOP grid; SPACE selects an icon (up to three probes per question).
   ENTER asks. 0 clears the query. Icons map to topics (memory, fear, pain, animal, child, etc.).
4. Readout — A scenario line and a subject response appear in the text panel.
   Text is built from templates + token pools (noun/detail) so the answer refers to the same thing as the prompt,
   with variety and compact data.
5. Gauges — PUPIL and FLUSH bars, PATTERN and Q-WEIGHT labels reflect the probe and subject model.
6. Verdict — H = human, R = android (see on-screen legend). Correct guess: HELL YEAH beeper sample and round score (see below).
   Wrong: oh no sample and lose a life; at 0 lives you go straight to game over with final score.
7. Between levels — Verdict screen shows points for the round, running total, lives; key continues.
8. Game over / high score — If your total qualifies, enter three initials; then the table is shown.
   Table entries are sorted by insert position (best at top); defaults fill unused slots until replaced.


Scoring

- Base round score: 100 points for a correct verdict.
- Penalty per question already asked that level: increases with level number (see get_penalty in src/subjects.asm).
- Formula: max(0, 100 − questions_asked × penalty) added to total on a correct verdict; wrong verdict adds 0.
- All cumulative and table scores use 16-bit values in logic and display.
